package com.server.store.context;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.EntityNotFoundException;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;
import com.server.store.data.DataManager;
import com.shared.context.User;
import com.shared.model.Assure;
import com.shared.model.Proposition;
import com.shared.utilitaire.Adresse;
import com.shared.utilitaire.Date;
/**
 * DAO de gestion des {@link User}
 * @author queyroi
 *
 */
public class UserManager extends DataManager<User>{

	static{
		ObjectifyService.register(User.class);
		ObjectifyService.register(Assure.class);	
		ObjectifyService.register(Adresse.class);
		ObjectifyService.register(Proposition.class);
		ObjectifyService.register(Date.class);
	}
	
	public void delete(User obj) {
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{
			ofy.delete(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}		
	}

	
	public List<User> getList() {
		List<User> listReturn = new ArrayList<User>();
		Objectify ofy = ObjectifyService.begin();
		Query<User> query = ofy.query(User.class);
		for(User i : query){
			listReturn.add(i);
		}
		return listReturn;
	}
	
	
	public User get(String name) throws IllegalArgumentException{
		for(User u : getList()){			
			if(u.getName().equals(name)) return u;
		}
		throw new IllegalArgumentException("Aucun utilisateur "+name+" dans la base");
	}
	
	public User get(String name,String password) throws IllegalArgumentException{		
		for(User u : getList()){			
			if(u.getName().equals(name) && u.getPassword().equals(password)) return u;
		}		
		throw new IllegalArgumentException("Aucun utilisateur '"+name+"' dans la base");		
	}
	
	public void delete(String name) throws IllegalArgumentException{
		Objectify ofy = ObjectifyService.begin();
		User user = ofy.query(User.class).filter("name =", name).get();
		if(user==null) throw new IllegalArgumentException("Aucun utilisateur '"+name+"' dans la base");
		delete(user);
	}
	
	public Assure getAssure(User user) throws IllegalArgumentException, EntityNotFoundException{		
		Objectify ofy = ObjectifyService.begin();
		return ofy.get(user.getKeyAssure());
	}
	
}
